home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2001 December / pcwk12201b.iso / Wersje pelne i specjalne / Winamp 2.77 i 3.0beta / wa3install_beta1.exe / Scripts / Magnifier / scripts / magnifier.m next >
Text File  |  2001-10-02  |  4KB  |  151 lines

  1. #include "../../../lib/std.mi"
  2.  
  3. /*--------------------------------------------------------------------
  4.  Magnifier script
  5. --------------------------------------------------------------------*/
  6.  
  7. Class Layer Lens;
  8.  
  9. Global Int last_x, last_y;
  10. Function Lens makeNewLens(Layout l);
  11.  
  12. Global List layout_list;
  13. Global List Fx_list;
  14. Global Timer mTimer;
  15. Global Slider PrecisionSlider;
  16. Global Int Precision;
  17.  
  18. Global Lens Fx1, Fx2, Fx3, Fx4, Fx5, Fx6, Fx7, Fx8, Fx9, Fx10;
  19.  
  20. Class Timer Magnifier;
  21. Function int initFx(Layer _Fx);
  22.  
  23. Lens.fx_onGetPixelD(double r, double d, double x, double y) {
  24.   if (d < 0.6) return d*(sin(d)*2);
  25.   return d;
  26. }
  27.  
  28. Lens.fx_onGetPixelA(double r, double d, double x, double y) {
  29.   return cos(d*3.14159/1.25);
  30. }
  31.  
  32. System.onScriptUnloading() {
  33.   delete mTimer;
  34.   int i;
  35.   for (i=0;i<fx_list.getNumItems();i++) {
  36.     Layer l = fx_list.enumItem(i);
  37.     delete l;
  38.   }
  39.   delete Fx_list;
  40.   delete layout_list;
  41. }
  42.  
  43. System.onScriptLoaded() {
  44.  
  45.   PrecisionSlider = getContainer("magnifier.config").getLayout("normal").getObject("magnifier.config.slider");
  46.   Precision = getPrivateInt("magnifier", "precision", 10);
  47.   float f = 24-Precision;
  48.   PrecisionSlider.setPosition((f / 24.0) * 255.0);
  49.  
  50.   mTimer = new Timer;
  51.   mTimer.setDelay(20);
  52.   if (Precision != 0) mTimer.start();
  53.  
  54.   layout_list = new List;
  55.  
  56.   int i, j, c;
  57.   Fx_list = new List;
  58.  
  59.   for (i=0;i<getNumContainers();i++) {
  60.     if (!enumContainer(i).isDynamic()) 
  61.      for (j=0;j<enumContainer(i).getNumLayouts();j++) {
  62.       c = c + 1;
  63.       if (c <= 10) {
  64.         Layout l = enumContainer(i).enumLayout(j);
  65.         layout_list.addItem(l);
  66.         // eeek, i definitly need arrays, and switch... or maybe i need to make objects residing inside lists trap events, hmm..
  67.         Layer la = makeNewLens(l);
  68.  
  69.         if (c == 1) Fx1 = la;
  70.         if (c == 2) Fx2 = la;
  71.         if (c == 3) Fx3 = la;
  72.         if (c == 4) Fx4 = la;
  73.         if (c == 5) Fx5 = la;
  74.         if (c == 6) Fx6 = la;
  75.         if (c == 7) Fx7 = la;
  76.         if (c == 8) Fx8 = la;
  77.         if (c == 9) Fx9 = la;
  78.         if (c == 10) Fx10 = la;
  79.       }
  80.      }
  81.   }
  82. }
  83.  
  84. mTimer.onTimer() {
  85.   int i;
  86.   if (getMousePosX() == last_x && getMousePosY() == last_y) return;
  87.   for (i=0;i<layout_list.getNumItems();i++) {
  88.     Layout l = layout_list.enumItem(i);
  89.     int x = l.getMousePosX();
  90.     int y = l.getMousePosY();
  91.     Layer thisFx = Fx_list.enumItem(i);
  92.     if (x < -50 || x > l.getWidth()+50 || y < -50 || y > l.getHeight()+50) {
  93.       if (thisFx.fx_getEnabled())
  94.         thisFx.fx_setEnabled(0);
  95.     } else {
  96.       if (!thisFx.fx_getEnabled())
  97.         thisFx.fx_setEnabled(1);
  98.     thisFx.resize(x-50, y-50, 100, 100);
  99.     }
  100.   last_x = getMousePosx();
  101.   last_y = getMousePosY();
  102.   }
  103. }
  104.  
  105. int initFx(Layer _Fx) {
  106.   Fx_list.addItem(_Fx);
  107.   _Fx.fx_setBgFx(1);
  108.   _Fx.fx_setWrap(0);
  109.   _Fx.fx_setBilinear(1);
  110.   _Fx.fx_setGridSize(Precision,Precision);
  111.   _Fx.fx_setRect(0);
  112.   _Fx.fx_setClear(0);
  113.   _Fx.fx_setLocalized(1);
  114.   _Fx.fx_setRealtime(0);
  115.   _Fx.fx_setAlphaMode(1);
  116.   return 0;
  117. }
  118.  
  119. Lens makeNewLens(Layout l) {
  120.   Lens la = new Layer;
  121.   la.setXmlParam("x", "-51");
  122.   la.setXmlParam("y", "-51");
  123.   la.setXmlParam("image", "script.magnifier.transparent50x50");
  124.   la.setXmlParam("ghost", "1");
  125.   la.init(l);
  126.   initFx(la);
  127.   return la;
  128. }
  129.  
  130. PrecisionSlider.onSetPosition(int p) {
  131.   float f = p;
  132.   p = 24-((f / 255.0) * 24.0);
  133.   for (int i=0;i<fx_list.getNumItems();i++) {
  134.     Lens fx = fx_list.enumItem(i);
  135.     fx.fx_setGridSize(p, p);
  136.     if (p == 0) {
  137.       fx.fx_setEnabled(0);
  138.       mTimer.stop();
  139.     } else {
  140.       if (Precision == 0)
  141.         mTimer.start();
  142.       if (fx.fx_getEnabled()) {
  143.         fx.fx_setEnabled(0);
  144.         fx.fx_setEnabled(1);
  145.       }
  146.     }
  147.   }
  148.   setPrivateInt("magnifier", "precision", p);
  149.   Precision = p;
  150. }
  151.